#include <stdio.h>
#include <unistd.h>
#include <signal.h>

// 一个回调函数，自定义信号操作
void sigcallback(int sig)
{
    printf("正在执行的信号是：%d号\n",sig);
}

int main()
{
    // 1.为40号和2号信号自定义处理方式
    signal(40,sigcallback);
    signal(2,sigcallback);

    // 2.阻塞全部信号（9号与19号信号永远无法阻塞与自定义操作）
    sigset_t set;  //自定义位图

    sigfillset(&set);  //调用该函数可将位图所有bit位置为1；
                       //sigemptyset()函数可将位图所有bit位置为0；
    
    // 管理信号阻塞状态的函数：SIG_BLOCK宏指阻塞
    sigprocmask(SIG_BLOCK,&set,NULL);

    // 3.人为制造多次40号和2号信号（键盘输入kill -2 [pid]）
    
    // 4.解除所有信号阻塞状态
    // 为方便观察阻塞与非阻塞状态的不同
    // 阻塞前加getchar();只有键盘输入字符回车后才会继续指向后续代码
    getchar();

    // 管理信号阻塞状态的函数：SIG_UNBLOCK宏指解除阻塞
    sigprocmask(SIG_UNBLOCK,&set,NULL);

    return 0;
}
